package org.leo.test.guava.eventbus.day1;

import com.google.common.eventbus.EventBus;
import lombok.extern.slf4j.Slf4j;

/**
 * <p>
 *
 * </p>
 *
 * @Package: org.leo.test.guava.eventbus.day1
 * @ClassName: ExceptionEventBusExample
 * @author: Li.Junlin
 * @date: 2019.12.16 14:27
 */
@Slf4j
public class ExceptionEventBusExample {
    public static void main(String[] args) {
        //在默认情况下，EventBus不会对异常信息进行处理，异常信息也不会终止EventBus的运行，只会简单的打印出异常堆栈信息。
        //在EventBus构造函数中传入SubscriberExceptionHandler来对异常信息进行处理
        //下面是通过lambda表达式来实现SubscriberExceptionHandler接口
        final EventBus eventBus = new EventBus((exception, context) -> {
            log.error(String.valueOf(context.getEvent()));//Exception event
            log.error(String.valueOf(context.getEventBus()));//defalut
            log.error(String.valueOf(context.getSubscriber()));//ExceptionListener
            log.error(String.valueOf(context.getSubscriberMethod()));//m3
        });
        eventBus.register(new ExceptionListener());
        eventBus.post("Exception event");
    }
}
